package com.zjsru.plan2024.oneday;

/**
 * 3191. 使二进制数组全部等于 1 的最少操作次数 I
 *
 * @Author: cookLee
 * @Date: 2024-10-18
 */
public class MinOperations {

    /**
     * 主
     * \
     * 输入：nums = [0,1,1,1,0,0]
     * 输出：3
     * 解释：
     * 我们可以执行以下操作：
     * 选择下标为 0 ，1 和 2 的元素并反转，得到 nums = [1,0,0,1,0,0] 。
     * 选择下标为 1 ，2 和 3 的元素并反转，得到 nums = [1,1,1,0,0,0] 。
     * 选择下标为 3 ，4 和 5 的元素并反转，得到 nums = [1,1,1,1,1,1] 。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        MinOperations minOperations = new MinOperations();
        int[] nums = new int[]{0, 1, 1, 1, 0, 0};
        System.out.println(minOperations.minOperations(nums));
    }

    /**
     * 最小操作
     *
     * @param nums nums
     * @return int
     */
    public int minOperations(int[] nums) {
        int len = nums.length;
        int ans = 0;
        for (int i = 0; i < len; i++) {
            //只有是0的时候才需要换位置
            if (nums[i] == 0) {
                //不满足每次改动3次的需求
                if (i > len - 3) {
                    return -1;
                }
                //后续三位都确保是1
                nums[i] ^= 1;
                nums[i + 1] ^= 1;
                nums[i + 2] ^= 1;
                ans++;
            }
        }
        return ans;
    }

}
